package notes.java.concurrent;

import java.util.Collections;
import java.util.Map;

import org.apache.commons.collections4.map.HashedMap;

// 通常final修饰的类，不可被继承，修饰的方法，不可被重载，修饰的变量不可修改
// 只是普通类型是不可变的，如果是引用类型，那么只是引用的对象不可变，它的值（内容）是可以修改的
// 如何做到引用的对象值也不可修改呢？
public class T5_Final {
	
	private static final String s = "JAVA";
	private static final int x = 1;
	
	private static Map<String, Object> map = new HashedMap<>();
	
	public static void main(String[] args) {
//		s = "ABC" // 编译报错
//		x = 1; // 编译报错
//		map = new HashMap<String, Object>(); // 当final修饰时，编译报错
		map.put("id", 1111); // 当final修饰时，修改值，可以
		// 让Map值，不可变
		map = Collections.unmodifiableMap(map);
		
		map.put("name", "zhangsan"); // 执行正常
		map.put("id", 2222); // 修改，异常
		System.out.println(map.toString());
	}

}
